﻿#pragma once

#include <mutex>
#include <QString>

/**
 * @brief 日志类。本类线程安全。使用时无需生成本类对象，ErrLog.cpp中定义了全局对象。实际上，无需关心BFErrLog类及其对象，
 *        应直接使用宏定义 LOGERR(moduleName, errLog) 来记录日志。
 * 
 */
class ErrLog  
{
private:
    std::mutex mtx;
    QString filePath;
public:
	ErrLog();
    ErrLog(ErrLog &) = delete;

    void Write(const QString& moduleName, const QString& errLog);

	static ErrLog *GetErrLogObj();
    static QString GetCurrentWorkingDir();
};

/**
 * @brief 应使用LOGERR宏来记录错误日志。 moduleName为发生错误的模块名，errLog为要记录的内容。
 *        日志将建立在当前工作目录下，文件名为ErrLog.txt，每个日志条目占三行文本，分别是：
 *        1. 时间
 *        2. 模块名
 *        3. 日志内容
 */
#define LOGERR(moduleName,msg) ErrLog::GetErrLogObj()->Write(moduleName,msg)
